# Leading rail parameter
class GuideMainPosition:
    def __init__(self, front_back, right_left, up_down, card_id, timer_right_left, timer_front_back, video, kino,
                 curtain, amo):
        self.front_back = front_back
        self.right_left = right_left
        self.up_down = up_down
        self.card_id = card_id
        self.timer_right_left = timer_right_left
        self.timer_front_back = timer_front_back
        self.video = video
        self.kino = kino
        self.curtain = curtain
        self.amo = amo


# Lighting parameter
class GuideLightPosition:
    def __init__(self, left_front_back, left_right_left, right_front_back, right_right_left,left_rotation,
                 right_rotation):
        self.left_front_back = left_front_back
        self.left_right_left = left_right_left
        self.right_front_back = right_front_back
        self.right_right_left = right_right_left
        self.left_rotation = left_rotation
        self.right_rotation = right_rotation


# Robot arm mobile phone warehouse location
class GuideMechanicalArmPositionIphone:
    def __init__(self, x, y, z, rx, ry, rz):
        self.x = x
        self.y = y
        self.z = z
        self.rx = rx
        self.ry = ry
        self.rz = rz


# Robotic arm in position
class GuideMechanicalArmPositionAlignment:
    def __init__(self, base, shoulder, elbow, wrist1, wrist2, wrist3):
        self.base = base
        self.shoulder = shoulder
        self.elbow = elbow
        self.wrist1 = wrist1
        self.wrist2 = wrist2
        self.wrist3 = wrist3


# Clamping position of mechanical arm
class GuideMechanicalArmPositionClamp:
    def __init__(self, base, shoulder, elbow, wrist1, wrist2, wrist3):
        self.base = base
        self.shoulder = shoulder
        self.elbow = elbow
        self.wrist1 = wrist1
        self.wrist2 = wrist2
        self.wrist3 = wrist3


# Guide rail position for each test item
AF_HDR_Blur_Timing = GuideMainPosition(front_back=700, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                                       timer_front_back=True, video=False, kino=True, curtain=True, amo=True)
Head_HDR = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=1, timer_right_left=False,
                             timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
ColorChecker = GuideMainPosition(front_back=400, right_left=0, up_down=0, card_id=4, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DXOMARKChart = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=3, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
DotCart = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=10, timer_right_left=False,
                            timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
GreyChart = GuideMainPosition(front_back=100, right_left=0, up_down=0, card_id=9, timer_right_left=False,
                              timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
MTFCart = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=8, timer_right_left=False,
                            timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
Timing = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=0, timer_right_left=True,
                           timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
Timing_Photo = GuideMainPosition(front_back=700, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                                 timer_front_back=False, video=False, kino=True, curtain=True, amo=False)
DeadLeaves = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                               timer_front_back=False, video=False, kino=True, curtain=False, amo=False)
DeadLeaves_video = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=0, timer_right_left=False,
                               timer_front_back=False, video=False, kino=True, curtain=False, amo=False)
PhotoVisualNoise = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=6, timer_right_left=False,
                                     timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
VideoVisualNoise = GuideMainPosition(front_back=1200, right_left=0, up_down=0, card_id=6, timer_right_left=False,
                                     timer_front_back=False, video=False, kino=False, curtain=False, amo=False)
PortraitHDR = GuideMainPosition(front_back=900, right_left=0, up_down=0, card_id=1, timer_right_left=False,
                                timer_front_back=False, video=False, kino=False, curtain=False, amo=False)

# Light axis default position
Guide_Light_Video = GuideLightPosition(530, 500, 530, 500, 0, 0)
Guide_Light_Photo = GuideLightPosition(980, 625, 980, 625, 0, 0)
# aim at the position
Alignment_Position = GuideMechanicalArmPositionAlignment(63.2277717590332, -73.42179870605469, 116.67835998535156,
                                                         -133.4412841796875, -89.49851989746094, -207.8751220703125)

Alignment_Position_on = GuideMechanicalArmPositionAlignment(58.18896484375, -85.29942321777344, 92.61829376220703,
                                                         -97.95460510253906, -91.91498565673828, -212.4373779296875)
Height_Position = GuideMechanicalArmPositionAlignment(-69.31, -104.60, 93.37,
                                                      -73.78, -85.00, -260.39)
# Mobile phone compartment above the location
Clamp_position_one = GuideMechanicalArmPositionClamp(-47.66420364379883, -88.24430847167969, 81.76655578613281,
                                                     -83.7724380493164, -88.88134765625, -228.23728942871094)
Clamp_position_two = GuideMechanicalArmPositionClamp(-53.41307067871094, -93.81495666503906, 103.37158203125,
                                                     -98.71772766113281, -88.618408203125, -234.31179809570312)
Clamp_position_three = GuideMechanicalArmPositionClamp(-59.229854583740234, -101.05996704101562, 105.49561309814453,
                                                       -94.55994415283203, -89.90081787109375, -240.95223999023438)
Clamp_position_four = GuideMechanicalArmPositionClamp(-67.26492309570312, -106.55998992919922, 114.43630981445312,
                                                      -98.0150375366211, -89.87060546875, -248.97755432128906)
Clamp_position_five = GuideMechanicalArmPositionClamp(-79.69096374511719, -111.71832275390625, 123.53216552734375,
                                                      -101.92463684082031, -87.3558578491211, -259.61151123046875)
Clamp_position_six = GuideMechanicalArmPositionClamp(-89.98084259033203, -116.25348663330078, 121.44108581542969,
                                                     -94.93636322021484, -88.32318115234375, -271.83441162109375)

# Mobile phone warehouse location


Iphone_position_one = GuideMechanicalArmPositionIphone(-0.4176400601863861, 0.2936500310897827, 0.07717970758676529,
                                                       2.2201287746429443, -2.2019968032836914, -0.01021965779364109)
Iphone_position_two = GuideMechanicalArmPositionIphone(-0.35944750905036926, 0.29369401931762695, 0.07625754922628403,
                                                       -2.2293121814727783, 2.198829174041748, -0.0005629849038086832)
Iphone_position_three = GuideMechanicalArmPositionIphone(-0.30082449316978455, 0.293264776468277, 0.07643748819828033,
                                                         -2.2503554821014404, 2.1866934299468994, 0.004217911045998335)
Iphone_position_four = GuideMechanicalArmPositionIphone(-0.24082206189632416, 0.2934308350086212, 0.07660704851150513,
                                                        -2.250304698944092, 2.186767101287842, 0.003920843359082937)
Iphone_position_five = GuideMechanicalArmPositionIphone(-0.1788851022720337, 0.29535436630249023, 0.07824119925498962,
                                                        2.1958165168762207, -2.2011525630950928, -0.040880437940359116)
Iphone_position_six = GuideMechanicalArmPositionIphone(-0.11854865401983261, 0.29634183645248413, 0.07701662927865982,
                                                       2.2414309978485107, -2.1732101440429688, -0.02432471327483654)
